DNS 질의
IT 위키
더 많은 작업
- DNS Query; DNS 질의 방식
- 도메인 이름(FQDN)을 IP 주소로 바꾸기 위해 리졸버와 네임 서버가 주고받는 질의. 응답하는 쪽이 끝까지 책임지는지에 따라 재귀적 질의와 반복적 질의로 나뉜다
DNS는 이름 정보를 한 서버에 모아 두지 않고 루트 → 최상위 도메인(kr, com 등) → 그 아래 도메인으로 나누어 관리한다. 그래서 www.icqa.or.kr 의 주소를 알아내려면 여러 네임 서버를 차례로 거쳐야 하는데, 이 과정을 누가 대신 해 주느냐가 질의 방식의 차이다.
- 사용자 PC 의 스텁 리졸버는 설정된 DNS 서버(ISP 나 회사의 캐싱 네임 서버, 재귀 리졸버라고도 한다)에 한 번 묻고 최종 답을 기다린다. 이것이 재귀적 질의다.
- 캐싱 네임 서버는 자기 캐시에 답이 없으면 루트 서버부터 차례로 묻는다. 루트·최상위 도메인 서버는 답을 대신 찾아 주지 않고 "다음에 물을 서버"만 알려 준다. 이것이 반복적 질의다.
- Recursive Query; 순환 질의라고 옮기기도 한다
질의를 받은 서버가 자기 정보만으로 답할 수 없을 때 다른 네임 서버에 대신 물어서 최종 답(IP 주소 또는 "없음" 오류)을 돌려주는 방식이다. 질의한 쪽은 한 번 묻고 한 번 답을 받는다.
www.icqa.or.kr 을 찾는 경우,
- 클라이언트가 캐싱 네임 서버에 www.icqa.or.kr 을 묻는다(재귀적 질의)
- 캐싱 네임 서버가 루트 서버에 묻는다 → kr 도메인의 네임 서버를 알려 준다
- kr 네임 서버에 묻는다 → or.kr 도메인의 네임 서버를 알려 준다
- or.kr 네임 서버에 묻는다 → icqa.or.kr 도메인의 네임 서버를 알려 준다
- icqa.or.kr 네임 서버에 묻는다 → www.icqa.or.kr 의 IP 주소를 알려 준다
- 캐싱 네임 서버가 그 주소를 캐시에 저장하고 클라이언트에 돌려준다
클라이언트 입장에서 이 전체 과정은 한 번의 재귀적 질의로 끝난다. 2~5단계에서 캐싱 네임 서버가 상위 서버들에 보내는 질의 하나하나는 반복적 질의다.
- 재귀 서비스를 해 주는지는 응답의 RA(Recursion Available) 비트로, 요청하는지는 질의의 RD(Recursion Desired) 비트로 표시한다.
- 아무에게나 재귀 질의를 받아 주는 서버(오픈 리졸버)는 DNS 증폭 공격에 악용된다. 그래서 캐싱 서버는 자기 망의 클라이언트에게만 재귀를 허용한다.
- Iterative Query; 비재귀적 질의
질의를 받은 서버가 자기가 아는 가장 가까운 답만 돌려주는 방식이다. 답을 알면 답을, 모르면 다음에 물어볼 네임 서버 목록(참조, referral)을 준다. 다음 서버에 다시 묻는 일은 질의한 쪽이 직접 한다. 루트 서버와 최상위 도메인 서버는 부하 때문에 반복적 질의에만 응답한다.
| 구분 | 재귀적 질의 | 반복적 질의 |
|---|---|---|
| 누가 끝까지 찾나 | 질의를 받은 서버 | 질의한 쪽 |
| 받는 응답 | 최종 답(IP 주소 또는 오류) | 답 또는 다음 서버 참조 |
| 주로 쓰는 구간 | 클라이언트 → 캐싱 네임 서버 | 캐싱 네임 서버 → 루트·TLD·권한 네임 서버 |
| 부하 | 질의를 받은 서버에 몰린다 | 분산된다 |
- 로컬 해석 : 네트워크로 묻기 전에 hosts 파일(리눅스 /etc/hosts, 윈도우 drivers\etc\hosts)과 리졸버 캐시에서 먼저 찾는다. 여기서 찾으면 DNS 서버에 묻지 않는다
- 역방향 질의(Reverse Lookup) : IP 주소로 도메인 이름을 찾는다. in-addr.arpa 영역의 PTR 레코드를 묻는다 → DNS 자원 레코드
- 정방향 질의 : 이름으로 주소를 찾는 보통의 질의 → 포워드 DNS